package com.xuyiwei.xblog.business.article.dao;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.xuyiwei.xblog.business.article.model.Article;
import com.xuyiwei.xblog.business.article.result.article.out.ArticleDto;
import com.xuyiwei.xblog.business.article.result.article.input.ArticleConditionVO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * <p>
 * 文章表 Mapper 接口
 * </p>
 *
 * @author xuyiwei
 * @since 2018-10-22
 */
public interface ArticleMapper extends BaseMapper<Article> {

    /**
     * 获取封面图片素材
     *
     * @return
     */
    List<String> listMaterial();

    /**
     * 获取文章列表
     * @return
     */
    List<ArticleDto> selectArticleList();

    /**
     * 获取文章详情
     * @return
     */
    ArticleDto selectArticleDetail(@Param("id") Long id);

    /**
     * 获取文章详情
     * @return
     */
    int punishArticle(@Param("ids") List<Long> ids);

    /**
     * 获取文章列表
     * @param page
     * @param vo
     * @param orderByField
     * @param isAsc
     * @return
     */
    List<ArticleDto> findPageByCondition(@Param("page") Page page, @Param("vo") ArticleConditionVO vo,
                                         @Param("orderByField") String orderByField, @Param("isAsc") boolean isAsc);

    /**
     * 获取热门文章
     * @param page
     * @param vo
     * @param orderByField
     * @param isAsc
     * @return
     */
    List<ArticleDto> listHotArticle(@Param("page") Page page, @Param("vo") ArticleConditionVO vo,
                                         @Param("orderByField") String orderByField, @Param("isAsc") boolean isAsc);

    /**
     * 得到这篇文章的上一篇和下一篇
     * @param insertTime
     * @return
     */
    List<ArticleDto> getPrevAndNextArticles(Date insertTime);

    /**
     * 是否存在文章
     * @param id
     * @return
     */
    Integer isExist(Long id);
}
